<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Hash;
use DB;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Symfony\Component\HttpFoundation\File\UploadedFile;

class NewsController extends Controller
{


    // 展示页
    public function getIndex(Request $request)
    {
      $num = $request->input('num',10);
      // 判断是否有搜索词
      if($request->input('keywords')){
          $news = DB::table('dota_news')->where('title','like','%'.$request->input('keywords').'%')->orderby('time','DESC')->paginate($num);
      }else{
          $news = DB::table('dota_news')->orderby('time','DESC')->paginate($num);
      }
      $data = $news->all();
      // 查询分类名
      foreach($data as $k=>$v){
          $names = DB::table('dota_cate')->where('id',$v->pid)->value('name');  
          // 将pid改为分类名
          $v->pid = $names;   
      }
      // 解析模板
      return view('admin.news.index',['news'=>$news,'data'=>$data,'request'=>($request->all()),'num'=>$num]);
    }

   /*
      新闻添加页
   */
    public function getAdd(Request $request)
    {
      // 查询所有分类
      // $cates = DB::table('dota_cate')->get();
      $cates = CateController::CateIndex();
      // 解析模板
      return view('admin.news.add',['cates'=>$cates]);
    }

    /*
      执行添加
    */
    public function postInsert(Request $request)
    { 
      // dd($request->all());
      // 进行表单验证用户填写是否正确
      $this->validate($request, [
        'title' => 'required',
        'contents' => 'required',
        'pid' => 'required',
      ],[
        'title.required' => '请填写标题!!',
        'contents.required' => '请填写内容!!',
        'pid.required' => '请选择分类!!',
      ]);
      // 接收文件信息 进行上传 
      $file = \Input::file('file');
      // dd($file);
      // 检验上传文件是否有效
      if($file->isValid()){
        // 获取文件名
        $clientName = $file -> getClientOriginalName();
        $tmpName = $file -> getFileName();
        // 获取tmp文件下的绝对路径
        $realPath = $file ->getRealPath();
        // 获取上传文件的后缀
        $entension = $file -> getClientOriginalExtension();
        // 限定上传图片格式
        $format = array('jpg','png','gif');
        // 判断格式是否正确
        if(in_array($entension,$format)){
          // 随机生成文件名
          $newName = rand(1000,9999).date("Ymd",time()).'.'.$entension;
          // 移动文件
          $path = $file -> move(public_path().'/public/newsimage',$newName);
          // dd($file);
        }else{
          return back()->with('error','图片格式不正确!!');
        }
        
      }
      // 获取指定数据
      $data = $request->only(['pid','title','contents','status']);
      $data['time'] = time();
      $data['pic'] = $newName;
      // 执行数据插入操作
      $res = DB::table('dota_news')->insert($data);
      // 判断
      if($res){
        return redirect('/admin/news/index')->with('success','新闻添加成功!!');
      }else{
        return back()->with('error','新闻添加失败!!');
      }
        
    }

    /*
      新闻删除操作
    */
    public function postDelete(Request $request)
    {
        $id = $request->input('id');

        // dd($id)
        
        // 执行删除
        $res = DB::table('dota_news')->where('id',$id)->delete();

        // 判断
        if($res){
            echo 2;
        }else{
            echo 3;
        }
    }

    /*
      新闻修改操作
    */
    public function getEdit($id)
    {
        dd($id);
        $news = DB::table('dota_news')->where('id',$id)->first();
        // dd($news);
        $cates = CateController::CateIndex();
        // 解析模板
        return view('admin.news.edit',['news'=>$news,'cates'=>$cates]);
    }

    /*
      执行修改
    */
    public function postUpdate(Request $request)
    {
      // dd($request->all());
      // 进行表单验证用户填写是否正确
      $this->validate($request, [
        'title' => 'required',
        'contents' => 'required',
        'pid' => 'required',
      ],[
        'title.required' => '请填写标题!!',
        'contents.required' => '请填写内容!!',
        'pid.required' => '请选择分类!!',
      ]);
      
      $id = $request->input('id');
      // 接收文件信息 进行上传
      $file = \Input::file('pic');
      // 判断是否修改图片
      if(!empty($file)){
        // 修改了图片
        // 检验上传文件是否有效
        if($file->isValid()){
          // 获取文件名
          $clientName = $file -> getClientOriginalName();
          $tmpName = $file -> getFileName();
          // 获取tmp文件下的绝对路径
          $realPath = $file ->getRealPath();
          // 获取上传文件的后缀
          $entension = $file -> getClientOriginalExtension();
          // 限定上传图片格式
          $format = array('jpg','png','gif');
          if(in_array($entension,$format)){
            // 随机生成文件名
            $newName = rand(1000,9999).date("Ymd",time()).'.'.$entension;
            // 移动文件
            $path = $file -> move(public_path().'/public/newsimage',$newName);
            // dd($file);
             // 获取要修改的数据
            $data = $request->only('title','contents','pid','status');
            $data['pic'] = $newName;
          }else{
            return back()->with('error','图片格式不正确!!');
          }
        }
      }else{
        // 没有修改图片
        // 获取要修改的数据
        $data = $request->only('title','contents','pid','status');
      }
      
      $data['time'] = time();
      
      // dd($data);
      // 执行数据修改操作
      $res = DB::table('dota_news')->where('id',$id)->update($data);

      // 判断是否修改成功
      if($res){
        return redirect('/admin/news/index')->with('success','新闻修改成功!!');
      }else{
        return back()->with('error','新闻修改失败!!');
      }
    }

}
